--- a/configure
+++ b/configure
@@ -34093,13 +34093,13 @@ if test x"$enable_grub_mount" = xno ; then
 fi
 
 if test x"$grub_mount_excuse" = x ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main_real in -lfuse" >&5
-$as_echo_n "checking for fuse_main_real in -lfuse... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main_real in -lfuse3" >&5
+$as_echo_n "checking for fuse_main_real in -lfuse3... " >&6; }
 if ${ac_cv_lib_fuse_fuse_main_real+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfuse  $LIBS"
+LIBS="-lfuse3  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -34134,7 +34134,7 @@ if test "x$ac_cv_lib_fuse_fuse_main_real" = xyes; then :
 #define HAVE_LIBFUSE 1
 _ACEOF
 
-  LIBS="-lfuse $LIBS"
+  LIBS="-lfuse3 $LIBS"
 
 else
   grub_mount_excuse="need FUSE library"
@@ -34145,13 +34145,13 @@ fi
 if test x"$grub_mount_excuse" = x ; then
   # Check for fuse headers.
   SAVED_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
-  for ac_header in fuse/fuse.h
+  CPPFLAGS="$CPPFLAGS -I/usr/include/fuse3 -DFUSE_USE_VERSION=30"
+  for ac_header in fuse3/fuse.h
 do :
-  ac_fn_c_check_header_mongrel "$LINENO" "fuse/fuse.h" "ac_cv_header_fuse_fuse_h" "$ac_includes_default"
-if test "x$ac_cv_header_fuse_fuse_h" = xyes; then :
+  ac_fn_c_check_header_mongrel "$LINENO" "fuse3/fuse.h" "ac_cv_header_fuse3_fuse_h" "$ac_includes_default"
+if test "x$ac_cv_header_fuse3_fuse_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define HAVE_FUSE_FUSE_H 1
+#define HAVE_FUSE3_FUSE_H 1
 _ACEOF
 
 else
--- a/Makefile.in
+++ b/Makefile.in
@@ -3131,10 +3131,10 @@ grub_fstest_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM)
 grub_fstest_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) 
 @COND_GRUB_MOUNT_TRUE@grub_mount_SOURCES = util/grub-mount.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c 
 @COND_GRUB_MOUNT_TRUE@nodist_grub_mount_SOURCES = grub_fstest_init.c 
-@COND_GRUB_MOUNT_TRUE@grub_mount_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/lib/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse 
+@COND_GRUB_MOUNT_TRUE@grub_mount_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/lib/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse3 
 @COND_GRUB_MOUNT_TRUE@grub_mount_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) 
 @COND_GRUB_MOUNT_TRUE@grub_mount_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) 
-@COND_GRUB_MOUNT_TRUE@grub_mount_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) 
+@COND_GRUB_MOUNT_TRUE@grub_mount_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -I/usr/include/fuse3
 @COND_GRUB_MOUNT_TRUE@grub_mount_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) 
 @COND_GRUB_MKFONT_TRUE@grub_mkfont_SOURCES = util/grub-mkfont.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c 
 @COND_GRUB_MKFONT_TRUE@nodist_grub_mkfont_SOURCES = 
--- a/util/grub-mount.c
+++ b/util/grub-mount.c
@@ -16,7 +16,7 @@
  *  You should have received a copy of the GNU General Public License
  *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
  */
-#define FUSE_USE_VERSION 26
+#define FUSE_USE_VERSION 30
 #include <config.h>
 #include <grub/types.h>
 #include <grub/emu/misc.h>
@@ -34,7 +34,7 @@
 #include <grub/command.h>
 #include <grub/zfs/zfs.h>
 #include <grub/i18n.h>
-#include <fuse/fuse.h>
+#include <fuse3/fuse.h>
 
 #include <stdio.h>
 #include <unistd.h>
@@ -147,7 +147,7 @@
 }
 
 static int
-fuse_getattr (const char *path, struct stat *st)
+fuse_getattr (const char *path, struct stat *st, struct fuse_file_info *fi)
 {
   struct fuse_getattr_ctx ctx;
   char *pathname, *path2;
@@ -330,13 +330,13 @@
   st.st_blocks = (st.st_size + 511) >> 9;
   st.st_atime = st.st_mtime = st.st_ctime
     = info->mtimeset ? info->mtime : 0;
-  ctx->fill (ctx->buf, filename, &st, 0);
+  ctx->fill (ctx->buf, filename, &st, 0, 0);
   return 0;
 }
 
 static int 
 fuse_readdir (const char *path, void *buf,
-	      fuse_fill_dir_t fill, off_t off, struct fuse_file_info *fi)
+	      fuse_fill_dir_t fill, off_t off, struct fuse_file_info *fi, enum fuse_readdir_flags fl)
 {
   struct fuse_readdir_ctx ctx = {
     .path = path,
